package category

import (
	"time"
)

// Category 分类实体
type Category struct {
	ID           uint       `gorm:"primaryKey" json:"id"`
	Name         string     `gorm:"size:100;not null" json:"name"`
	Slug         string     `gorm:"size:100;not null;uniqueIndex:idx_categories_slug" json:"slug"` // 分类标识，唯一索引
	Type         int        `gorm:"not null" json:"type"`                                          // 分类类型：1-文章分类，2-书籍分类
	ParentID     uint       `gorm:"default:0" json:"parent_id"`                                    // 父分类ID
	Description  string     `gorm:"size:500" json:"description"`                                   // 分类描述
	Order        int        `gorm:"default:0" json:"order"`                                        // 排序值
	Status       int        `gorm:"default:1" json:"status"`                                       // 状态：1-启用，0-禁用
	ContentCount int64      `gorm:"default:0" json:"content_count"`                                // 内容数量
	CreatedAt    time.Time  `json:"created_at"`
	UpdatedAt    time.Time  `json:"updated_at"`
	DeletedAt    *time.Time `gorm:"index" json:"deleted_at,omitempty"`
}

// TableName 表名
func (Category) TableName() string {
	return "categories"
}

// IsValid 验证分类是否有效
func (c *Category) IsValid() bool {
	return c.ID > 0 && c.Status == 1
}

// IsArticleCategory 是否是文章分类
func (c *Category) IsArticleCategory() bool {
	return c.Type == 1
}

// IsBookCategory 是否是书籍分类
func (c *Category) IsBookCategory() bool {
	return c.Type == 2
}

// HasParent 是否有父分类
func (c *Category) HasParent() bool {
	return c.ParentID > 0
}

// HasChildren 是否有子分类
func (c *Category) HasChildren() bool {
	return c.ContentCount > 0
}
